package de.g18.gruppe3.common.ldap;

import de.g18.gruppe3.common.exception.ServiceException;
import de.g18.gruppe3.common.exception.WrongUsernameAndOrPasswordException;
import de.g18.gruppe3.common.model.AccountAdmin;

/**
 * LDAP-Schnittstelle um einen Benutzer anzumelden bzw. abzumelden.
 *
 * @author <a href="mailto:kevinhuber.kh@gmail.com">Kevin Huber</a>
 */
public interface LoginService {

    /**
     * Versucht eine Verbindung zum LDAP-Server aufzubauen und sich mit den übergebenen
     * Logindaten anzumelden
     *
     * @param aAdmin Objekt mit Anmeldedaten
     * @throws WrongUsernameAndOrPasswordException Wird geworfen wenn die Zugangsdaten nicht korrekt waren.
     */
    void login(AccountAdmin aAdmin) throws ServiceException, WrongUsernameAndOrPasswordException;

    /**
     * Prüft ob ein LDAPContext besteht und mit dem LDAP-Server verbunden ist
     */
    boolean isLoggedIn();

    /**
     * Gibt den LDAPContext wieder frei
     */
    void logout();
}
